package top.lishuoboy.dependency.base.core;

import cn.hutool.core.util.RadixUtil;
import cn.hutool.core.util.RandomUtil;

/**
 * 进制转换工具
 * 2024-8-6
 *
 * @author lishuoboy
 */
public class MyRadixUtil {
    /** 64个字符（ 10各数字 + 52个字符， + 2个其它字符。64进制的另外2个字符没有统一标准，我使用{、}这2个字符 ，在 ASCII　编码 在 z的后面，便于排序 */
    private static final String BASE_CHAR_64 = RandomUtil.BASE_NUMBER + RandomUtil.BASE_CHAR.toUpperCase() + RandomUtil.BASE_CHAR + "{}";


    /**
     * 10进制数转为其它进制
     *
     * @param num   原10进制数
     * @param radix 进制
     *
     * @return 其它进制
     */
    public static String encode(long num, int radix) {
        return RadixUtil.encode(BASE_CHAR_64.substring(0, radix), num);
    }


    /**
     * 其它进制转为10进制
     *
     * @param num   其它进制数
     * @param radix 进制
     *
     * @return 10进制数
     */
    public static long decode(String num, int radix) {
        return RadixUtil.decode(BASE_CHAR_64.substring(0, radix), num);
    }

    /**
     * 进制转换
     * 将 radixOld 的 num 转为 radixNew
     *
     * @param num      原始值
     * @param radixOld 原进制
     * @param radixNew 新进制
     *
     * @return radixNew进制的新值
     */
    public static String convert(String num, int radixOld, int radixNew) {
        return encode(decode(num, radixOld), radixNew);
    }
}
